package szoftlab4;

/**
 * Olyan csatlakozó, amelynek az értékét a szülő építőelem kiolvassa, de
 * közvetlenül nem változtatja.
 * @author Peti
 */
@SuppressWarnings("LeakingThisInConstructor")
public class Bemenet extends Csatlakozo
{

    private Kimenet kimenet;

    /**
     * A bemenet konstruktora. Beállíthatja az adott bemenethez tartozó kimenetet.
     *
     * @param kimenet
     * A bemenetre csatlakozó kimenet. Ha null, akkor nem állít be kimenetet.
     */
    public Bemenet(Kimenet kimenet)
    {
        Logger.log(this, HivasTipus.Create, "Bemenet", "Bemenet()");
        Logger.log(this, HivasTipus.Return, "Bemenet", "Bemenet()");
    }

    /**
     * Visszaadja a bemenetre csatlakozó kimenetet.
     *
     * @return
     * A bemenetre csatlakozó kimenet.
     */
    public Kimenet getKimenet()
    {
        Logger.log(this, HivasTipus.Call, "Bemenet", "Kimenet getKimenet()");
        Logger.log(this, HivasTipus.Return, "Bemenet", "Kimenet getKimenet()");
        return null;
    }

    /**
     * Csatlakozást kezdeményez egy építőelem megadott sorszámú kimenetével.
     * Ha sikeres, eltárolja a kimenetet, mint csatlakozottat.
     *
     * @param szulo
     * A vezeték, amelyhez tartozik ez a bemenet.
     *
     * @param cel
     * A csatlakozásra kijelölt építőelem.
     *
     * @param bemenetIndexe
     * Ennek a bemenetnek a sorszáma a szülőjében.
     *
     * @param kimenetIndexe
     * A csatlakozásra kijelölt kimenet sorszáma a szülő építőelemében.
     *
     */
    void csatlakozik(Vezetek szulo, Epitoelem cel, int bemenetIndexe, int kimenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Bemenet", "void csatlakozik(Vezetek szulo, NemVezetek cel, int bemenetIndexe, int kimenetIndexe");
        cel.csatlakozik(bemenetIndexe, szulo, kimenetIndexe);
        Logger.log(this, HivasTipus.Return, "Bemenet", "void csatlakozik(Vezetek szulo, NemVezetek cel, int bemenetIndexe, int kimenetIndexe");
    }

    /**
     * Csatlakozást kezdeményez egy építőelem megadott sorszámú kimenetével.
     * Ha sikeres, eltárolja a kimenetet, mint csatlakozottat.
     *
     * @param szulo
     * Az építőelem, amelyhez tartozik ez a bemenet.
     *
     * @param cel
     * A csatlakozásra kijelölt építőelem.
     *
     * @param bemenetIndexe
     * Ennek a bemenetnek a sorszáma a szülőjében.
     *
     * @param kimenetIndexe
     * A csatlakozásra kijelölt kimenet sorszáma a szülő építőelemében.
     *
     */
    void csatlakozik(NemVezetekEpitoelem szulo, Epitoelem cel, int bemenetIndexe, int kimenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Bemenet", "void csatlakozik(NemVezetek szulo, NemVezetek cel, int bemenetIndexe, int kimenetIndexe");
        cel.csatlakozik(bemenetIndexe, szulo, kimenetIndexe);
        Logger.log(this, HivasTipus.Return, "Bemenet", "void csatlakozik(NemVezetek szulo, NemVezetek cel, int bemenetIndexe, int kimenetIndexe");
    }

    /**
     * Beállítja ennek a bemenetnek az értékét.
     *
     * @param ertek
     * A bemenet új értéke.
     */
    public void setErtek(Boolean ertek)
    {
        Logger.log(this, HivasTipus.Call, "Bemenet", "void setErtek(Boolean ertek)");
        try
        {
            if (Logger.igenloValasz("Fel kell venni az eseménysorba ezt a bemenetet?"))
            {
                getSzulo().getAsztal().sorbaFelvesz(null);
            }
        }
        catch (Exception e)
        {
        }
        Logger.log(this, HivasTipus.Return, "Bemenet", "void setErtek(Boolean ertek)");
    }
}
